/**
 * API 类型定义 - 统一的响应格式和数据类型
 *
 * 本文件定义了与后端API对应的TypeScript类型，包括：
 *
 * ## 通用响应格式
 * - `ApiResponse<T>`: 统一的API响应包装格式 (对应后端 response.Response)
 * - `ListResponse<T>`: 通用列表响应格式 (对应后端 response.List)
 * - `PageResponse<T>`: 通用分页响应格式 (对应后端 response.Page)
 *
 * ## 使用方式
 * ```typescript
 * // 列表API调用
 * const listResponse = await api.get<ListResponse<HeyGenAccount>>('/accounts/list');
 * const accounts = listResponse.rows;  // HeyGenAccount[]
 * const total = listResponse.count;    // number
 *
 * // 分页API调用
 * const pageResponse = await api.get<PageResponse<Video>>('/videos/page', { page: 1, page_size: 10 });
 * const videos = pageResponse.items;       // Video[]
 * const totalCount = pageResponse.total_count; // number
 * const totalPages = pageResponse.total_pages; // number
 * ```
 *
 * ## 后端对应关系
 * - 前端 `ApiResponse<T>` ↔ 后端 `response.Response`
 * - 前端 `ListResponse<T>` ↔ 后端 `response.List`
 * - 前端 `PageResponse<T>` ↔ 后端 `response.Page`
 *
 * 详细使用示例请参考：src/examples/GenericApiUsage.tsx
 */

// ================================
// 基础响应格式
// ================================

/**
 * 统一的后端响应格式
 */
export interface ApiResponse<T = unknown> {
  /** 状态码：200 表示成功，其他表示错误 */
  code: number;
  /** 响应数据，成功时包含具体数据 */
  data?: T;
  /** 响应消息 */
  msg: string;
  /** 详细错误信息（可选） */
  detail?: string;
}

/**
 * API 错误类型
 */
export interface ApiError {
  code: number;
  msg: string;
  detail?: string;
  status?: number;
  timestamp?: string; // 错误发生时间
  request_id?: string; // 请求ID，用于追踪
  suggestions?: string[]; // 错误处理建议
}

/**
 * 分页配置
 */
export interface PaginationParams {
  limit?: number;
  offset?: number;
  page?: number;
}

/**
 * 分页响应
 */
export interface PaginatedResponse<T> {
  items: T[];
  total: number;
  page?: number;
  limit?: number;
  has_more?: boolean;
}

/**
 * 后端通用列表响应格式
 *
 * 对应后端的 response.List 结构
 *
 * @example
 * ```typescript
 * // API 调用示例
 * const response = await api.get<ListResponse<HeyGenAccount>>('/accounts/list');
 * const accounts = response.rows; // HeyGenAccount[]
 * const total = response.count;   // number
 * ```
 */
export interface ListResponse<T> {
  /** 数据列表 */
  rows: T[];
  /** 数据总数 */
  count: number;
}

/**
 * 后端通用分页响应格式
 *
 * 对应后端的 response.Page 结构
 *
 * @example
 * ```typescript
 * // API 调用示例
 * const response = await api.get<PageResponse<Video>>('/videos/page', { page: 1, page_size: 10 });
 * const videos = response.items;      // Video[]
 * const total = response.total_count; // number
 * const page = response.page;         // number
 * const pageSize = response.page_size; // number
 * const totalPages = response.total_pages; // number
 * ```
 */
export interface PageResponse<T> {
  /** 当前页数据列表 */
  items: T[];
  /** 数据总数 */
  total_count: number;
  /** 当前页码 */
  page: number;
  /** 每页大小 */
  page_size: number;
  /** 总页数 */
  total_pages: number;
}

// ================================
// Avatar 相关类型
// ================================

/**
 * Avatar Group - 对应后端 CachedAvatarGroup 模型
 */
export interface AvatarGroup {
  group_id: string; // 对应后端 GroupID 字段
  name: string;
  group_type: 'PRIVATE' | 'PHOTO' | 'PUBLIC' | 'PUBLIC_PHOTO' | 'COMMUNITY_PHOTO';
  num_looks: number;
  preview_image: string;
  default_voice_id?: string;
  train_status?: string;
  created_at?: number;
  account_id?: number; // 对应后端 AccountID 字段
  last_sync_at?: string; // 对应后端 LastSyncAt 字段
}

/**
 * Avatar Group 列表响应
 */
export interface AvatarGroupListData {
  avatar_group_list: AvatarGroup[];
  total_count?: number;
}

/**
 * Avatar - 对应后端 CachedAvatar 模型
 */
export interface Avatar {
  avatar_id: string; // 对应后端 AvatarID 字段 (JSON标签是"avatar_id")
  avatar_name: string;
  gender: string; // 允许任意字符串值
  preview_image_url: string;
  preview_video_url?: string; // 可选，因为可能为空
  premium: boolean;
  tags?: unknown; // 对应后端 datatypes.JSON
  type?: string;
  default_voice_id?: string;
  is_public?: boolean; // 对应后端 IsPublic 字段
  group_id?: string;
  account_id?: number; // 对应后端 AccountID 字段
  last_sync_at?: string; // 对应后端 LastSyncAt 字段
}

/**
 * Avatar 列表响应
 */
export interface AvatarListData {
  avatars: Avatar[];
  total_count?: number;
}

/**
 * Avatar 详情
 */
export interface AvatarDetails extends Avatar {
  type: string;
  is_public: boolean;
  default_voice_id: string;
  description?: string;
  styles?: AvatarStyle[];
  voice_options?: VoiceOption[];
}

/**
 * Avatar Style
 */
export interface AvatarStyle {
  style_id: string;
  style_name: string;
  description?: string;
  preview_url?: string;
}

/**
 * Voice Option
 */
export interface VoiceOption {
  voice_id: string;
  voice_name: string;
  language: string;
  gender: 'male' | 'female';
  preview_url?: string;
  is_default: boolean;
}

/**
 * Talking Photo
 */
export interface TalkingPhoto {
  talking_photo_id: string;
  talking_photo_name: string;
  preview_image_url: string;
  preview_video_url?: string;
}

/**
 * Talking Photo 列表响应
 */
export interface TalkingPhotoListData {
  talking_photos: TalkingPhoto[];
  count: number;
  total: number;
}

// ================================
// Voice 相关类型
// ================================

/**
 * Voice
 */
export interface Voice {
  voice_id: string;
  language: string;
  gender: 'Male' | 'Female' | 'Unknown';
  name: string;
  preview_audio: string;
  support_pause: boolean;
  emotion_support: boolean;
  support_interactive_avatar?: boolean;
  support_locale?: boolean;
}

/**
 * Voice 列表响应
 */
export interface VoiceListData {
  voices: Voice[];
  total_count?: number;
}

// ================================
// Video 相关类型
// ================================

/**
 * Video 状态
 */
export type VideoStatus = 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';

/**
 * Video
 */
export interface Video {
  id?: string;
  video_id?: string;
  title?: string;
  status: VideoStatus;
  duration?: number;
  video_url?: string;
  thumbnail_url?: string;
  gif_url?: string;
  callback_id?: string;
  caption_url?: string;
  video_url_caption?: string;
  created_at?: string;
  updated_at?: string;
  error?: VideoError;
}

/**
 * Video 错误信息
 */
export interface VideoError {
  code: number;
  message: string;
  detail?: string;
}

/**
 * Video 列表响应
 */
export interface VideoListData {
  videos: Video[];
  total?: number;
}

/**
 * Video 创建请求
 */
export interface CreateVideoRequest {
  title?: string;
  caption?: boolean;
  callback_id?: string;
  callback_url?: string;
  folder_id?: string;
  dimension: {
    width: number;
    height: number;
  };
  video_inputs: VideoInput[];
}

/**
 * Video 输入
 */
export interface VideoInput {
  character: CharacterSettings;
  voice: VoiceSettings;
  background?: BackgroundSettings;
}

/**
 * Character 设置
 */
export interface CharacterSettings {
  type: 'avatar' | 'talking_photo';
  avatar_id?: string;
  avatar_style?: string;
  talking_photo?: TalkingPhotoSettings;
}

/**
 * Talking Photo 设置
 */
export interface TalkingPhotoSettings {
  talking_photo_id: string;
  talking_photo_url?: string;
  talking_photo_style?: string;
  expression_repetition?: number;
  super_resolution?: boolean;
}

/**
 * Voice 设置
 */
export interface VoiceSettings {
  type: 'text' | 'audio';
  voice_id?: string;
  input_text?: string;
  audio_url?: string;
  speed?: number;
  pitch?: number;
}

/**
 * Background 设置
 */
export interface BackgroundSettings {
  type: 'color' | 'image' | 'video';
  value: string;
}

/**
 * Video 创建响应
 */
export interface CreateVideoData {
  video_id: string;
  status: VideoStatus;
  estimated_time?: number;
}

// ================================
// Account 相关类型
// ================================

/**
 * HeyGen Account
 */
export interface HeyGenAccount {
  id: number;
  name: string;
  api_key: string;
  is_active: boolean;
  username?: string;
  email?: string;
  first_name?: string;
  last_name?: string;
  remaining_quota?: number;
  last_sync_at?: string;
  created_at?: string;
  updated_at?: string;
}

/**
 * Account 列表响应
 */
export interface AccountListData {
  accounts: HeyGenAccount[];
  total_count?: number;
}

/**
 * 创建 Account 请求
 */
export interface CreateAccountRequest {
  name: string;
  api_key: string;
}

/**
 * Quota 信息
 */
export interface QuotaInfo {
  credit_left: number;
  credit_used: number;
  credit_total: number;
  video_sec_left: number;
  video_sec_used: number;
  video_sec_total: number;
  remaining_quota?: number;
}

// ================================
// AI Service Provider 相关类型
// ================================

/**
 * AI服务提供商类型
 */
export type AIProviderType = 'heygen' | 'openai' | 'deepseek';

/**
 * AI服务提供商
 */
export interface AIProvider {
  id: number;
  name: string;
  provider_type: AIProviderType;
  is_active: boolean;
  status: 'pending' | 'active' | 'error' | 'disabled';
  status_msg?: string;
  display_name?: string;
  username?: string;
  email?: string;
  usage?: Record<string, unknown>;
  quota_info?: Record<string, unknown>;
  last_sync_at?: string;
  last_check_at?: string;
  created_at: string;
  updated_at: string;
  capabilities?: string[];
}

/**
 * 创建AI服务提供商请求
 */
export interface CreateAIProviderRequest {
  name: string;
  provider_type: AIProviderType;
  api_key: string;
  api_secret?: string;
  base_url?: string;
  config?: Record<string, unknown>;
}

/**
 * 更新AI服务提供商请求
 */
export interface UpdateAIProviderRequest {
  name?: string;
  api_key?: string;
  api_secret?: string;
  base_url?: string;
  config?: Record<string, unknown>;
}

// ================================
// Auth 相关类型
// ================================

/**
 * 登录请求
 */
export interface LoginRequest {
  username: string;
  password: string;
}

/**
 * 登录响应
 */
export interface LoginData {
  token: string;
  expires_at: string;
  admin: {
    id: number;
    username: string;
    email: string;
    is_active: boolean;
    last_login: string;
  };
}

/**
 * 用户信息
 */
export interface UserInfo {
  id: number;
  username: string;
  email: string;
  is_active: boolean;
  last_login: string;
}

// ================================
// Health 相关类型
// ================================

/**
 * 健康检查响应
 */
export interface HealthData {
  service: string;
  status: 'healthy' | 'unhealthy';
  timestamp?: string;
  version?: string;
}

// ================================
// Sync 相关类型
// ================================

/**
 * 同步状态
 */
export interface SyncStatus {
  type: string;
  status: 'idle' | 'running' | 'completed' | 'failed';
  last_sync_at?: string;
  next_sync_at?: string;
  progress?: number;
  message?: string;
}

/**
 * 同步状态列表响应
 */
export interface SyncStatusData {
  sync_status: SyncStatus[];
}

/**
 * 同步结果
 */
export interface SyncResult {
  type: string;
  status: 'success' | 'failed';
  count?: number;
  message?: string;
  started_at: string;
  completed_at?: string;
}

// ================================
// Dashboard 相关类型 (新版简化)
// ================================

/**
 * 仪表盘统计数据 - 新版简化版本
 */
export interface DashboardStats {
  /** 账户统计 */
  accounts: {
    total: number;
    active: number;
  };
  /** Avatar统计 */
  avatars: {
    groups: number;
    total: number;
  };
  /** 视频统计 */
  videos: {
    total: number;
    completed: number;
    processing: number;
    failed: number;
    draft: number;
  };
  /** 系统状态 */
  system: {
    last_sync_at?: string;
  };
}

/**
 * 活跃账户信息
 */
export interface AccountInfo {
  id: number;
  name: string;
  email: string;
  username: string;
  status: string;
  credit_left: number;
  credit_used: number;
  credit_total: number;
  video_sec_left: number;
  video_sec_used: number;
  video_sec_total: number;
  credit_usage_rate: number;
  video_usage_rate: number;
  last_check_at?: string;
}

/**
 * 内容统计
 */
export interface ContentStats {
  // 视频统计
  videos_today: number;
  videos_this_week: number;
  videos_total: number;
  videos_processing: number;
  videos_pending: number;
  videos_completed: number;
  videos_failed: number;
  success_rate: number;

  // Avatar统计
  avatar_groups: number;
  avatars_total: number;
  talking_photos: number;
  public_groups: number;
  private_groups: number;

  // Voice统计
  voices_total: number;
  voices_used: number;
  popular_voices: PopularVoice[];
}

/**
 * 资源统计
 */
export interface ResourceStats {
  /** 数据库大小 */
  database_size: string;
  /** 缓存项目数量 */
  cached_items: number;
  /** 上次同步时间 */
  last_sync_time?: string;
  /** 同步状态 */
  sync_status: string;
  /** 下次同步时间 */
  next_sync_time?: string;
}

/**
 * 系统统计
 */
export interface SystemStats {
  /** API状态 */
  api_status: string;
  /** 平均响应时间(毫秒) */
  avg_response_time: number;
  /** 今日错误数 */
  errors_today: number;
  /** 运行时间(小时) */
  uptime_hours: number;
  /** 数据库状态 */
  database_status: string;
}

/**
 * 活动项目
 */
export interface ActivityItem {
  type: string;
  title: string;
  description: string;
  status: 'success' | 'error' | 'processing' | 'warning';
  created_at: string;
  icon: string;
  color: string;
}

/**
 * 热门声音
 */
export interface PopularVoice {
  voice_id: string;
  voice_name: string;
  language: string;
  usage_count: number;
}

// ================================
// Text Generation 相关类型
// ================================

/**
 * 文案生成请求
 */
export interface TextGenerationRequest {
  /** 生成类型 */
  type: 'product' | 'social' | 'marketing' | 'creative' | 'custom';
  /** 主题或关键词 */
  topic: string;
  /** 目标受众 */
  audience?: string;
  /** 语调风格 */
  tone?: 'professional' | 'casual' | 'friendly' | 'humorous' | 'serious';
  /** 文案长度 */
  length?: 'short' | 'medium' | 'long';
  /** 语言 */
  language?: 'zh-CN' | 'en-US' | 'ja-JP' | 'ko-KR';
  /** 附加要求 */
  requirements?: string;
  /** AI服务提供商ID */
  provider_id?: number;
  /** 使用的模型 */
  model?: string;
}

/**
 * 文案生成响应
 */
export interface TextGenerationResponse {
  /** 生成的文案ID */
  id: string;
  /** 生成的文案内容 */
  content: string;
  /** 生成类型 */
  type: string;
  /** 主题 */
  topic: string;
  /** 创建时间 */
  created_at: string;
  /** 字数统计 */
  word_count: number;
  /** 使用的模型 */
  model?: string;
}

/**
 * 文案模板
 */
export interface TextTemplate {
  /** 模板ID */
  id: string;
  /** 模板名称 */
  name: string;
  /** 模板类型 */
  type: 'product' | 'social' | 'marketing' | 'creative' | 'custom';
  /** 模板描述 */
  description: string;
  /** 模板内容 */
  template: string;
  /** 模板变量 */
  variables: string[];
  /** 是否启用 */
  is_active: boolean;
}

/**
 * 文案历史记录
 */
export interface TextGenerationHistory {
  /** 记录ID */
  id: string;
  /** 请求参数 */
  request: TextGenerationRequest;
  /** 生成内容 */
  content: string;
  /** 生成状态 */
  status: 'pending' | 'completed' | 'failed';
  /** 创建时间 */
  created_at: string;
  /** 更新时间 */
  updated_at: string;
  /** 是否收藏 */
  is_favorite?: boolean;
}

/**
 * 文案生成统计
 */
export interface TextGenerationStats {
  /** 总生成数量 */
  total_generated: number;
  /** 今日生成数量 */
  today_generated: number;
  /** 本周生成数量 */
  week_generated: number;
  /** 平均字数 */
  avg_word_count: number;
  /** 最常用类型 */
  popular_types: Array<{
    type: string;
    count: number;
  }>;
}

// ================================
// 用户画像分析相关类型
// ================================

/**
 * 用户画像分析请求
 */
export interface UserPersonaAnalysisRequest {
  /** 产品名称 */
  product_name: string;
  /** 产品卖点 */
  selling_points: string;
  /** 产品类别 */
  product_category?: string;
  /** 价格区间 */
  price_range?: string;
  /** 目标市场 */
  target_market?: string;
  /** 附加信息 */
  additional_info?: string;
  /** AI服务提供商ID */
  provider_id?: number;
  /** 模型名称 */
  model?: string;
}

/**
 * 用户画像
 */
export interface UserPersona {
  /** 画像ID */
  id: string;
  /** 画像名称 */
  name: string;
  /** 年龄区间 */
  age: string;
  /** 性别 */
  gender?: string;
  /** 职业 */
  occupation: string;
  /** 收入水平 */
  income?: string;
  /** 教育水平 */
  education?: string;
  /** 生活方式 */
  lifestyle: string;
  /** 痛点 */
  pain_points: string[];
  /** 动机 */
  motivations: string[];
  /** 行为特征 */
  behaviors: string[];
  /** 偏好 */
  preferences: string[];
  /** 置信度 (0-1) */
  confidence: number;
}

/**
 * 兴趣话题
 */
export interface InterestTopic {
  /** 话题类别 */
  category: string;
  /** 具体话题列表 */
  topics: string[];
  /** 相关性 (0-1) */
  relevance: number;
}

/**
 * 用户画像分析响应
 */
export interface UserPersonaAnalysisResponse {
  /** 记录ID */
  id: string;
  /** 产品名称 */
  product_name: string;
  /** 分析概述 */
  analysis: string;
  /** 主要用户画像 */
  primary_personas: UserPersona[];
  /** 潜在用户画像 */
  potential_personas: UserPersona[];
  /** 兴趣话题 */
  interest_topics: InterestTopic[];
  /** 营销策略建议 */
  marketing_strategy: string;
  /** 创建时间 */
  created_at: string;
}

/**
 * 用户画像分析历史记录
 */
export interface UserPersonaHistory {
  /** 记录ID */
  id: string;
  /** 请求信息 */
  request: {
    product_name: string;
    selling_points: string;
    product_category?: string;
    price_range?: string;
    target_market?: string;
    additional_info?: string;
  };
  /** 分析概述 */
  analysis?: string;
  /** 主要用户画像 */
  primary_personas?: UserPersona[];
  /** 潜在用户画像 */
  potential_personas?: UserPersona[];
  /** 兴趣话题 */
  interest_topics?: InterestTopic[];
  /** 营销策略建议 */
  marketing_strategy?: string;
  /** 状态 */
  status: string;
  /** 是否收藏 */
  is_favorite: boolean;
  /** 创建时间 */
  created_at: string;
  /** 更新时间 */
  updated_at: string;
}

/**
 * 用户画像分析统计
 */
export interface UserPersonaStats {
  /** 总分析数量 */
  total_analyses: number;
  /** 今日分析数量 */
  today_analyses: number;
  /** 本周分析数量 */
  week_analyses: number;
  /** 热门产品类别 */
  popular_categories: Array<{
    category: string;
    count: number;
  }>;
  /** 热门用户画像类型 */
  top_persona_types?: Array<{
    persona_type: string;
    count: number;
  }>;
}

// ================================
// Social Account 相关类型 (来自 socialAccount.ts)
// ================================

// Re-export types from socialAccount.ts for API consistency
export type {
  SocialPlatform,
  ContentType,
  WritingTone,
  SocialAccount,
  AccountMemory,
  AccountPreferences,
  AccountContentHistory,
  CreateSocialAccountRequest,
  UpdateSocialAccountRequest,
  UpdateAccountMemoryRequest,
  UpdateAccountPreferencesRequest,
  SocialAccountWithDetails,
  EnhancedTextGenerationRequest,
  SocialAccountStats,
  PlatformUsageStats,
} from '../types/socialAccount';
